import os
import json
from typing import List, Dict, Any
from datetime import datetime


def save_paragraphs_as_text(paragraphs: List[str], output_dir: str, chapter_hash: str) -> str:
    """
    将分段文字保存为独立的文本文件
    
    Args:
        paragraphs: 分段后的文本列表
        output_dir: 输出目录
        chapter_hash: 章节哈希值
    
    Returns:
        str: 保存的文件路径
    """
    paragraphs_file = os.path.join(output_dir, f"paragraphs_{chapter_hash}.txt")
    
    with open(paragraphs_file, 'w', encoding='utf-8') as f:
        f.write("# 章节分段文字\n")
        f.write(f"# 生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
        f.write(f"# 章节哈希: {chapter_hash}\n")
        f.write(f"# 段落总数: {len(paragraphs)}\n\n")
        
        for i, paragraph in enumerate(paragraphs, 1):
            f.write(f"## 段落 {i}\n")
            f.write(f"{paragraph}\n\n")
            f.write("-" * 50 + "\n\n")
    
    return paragraphs_file


def save_image_prompts_as_text(image_prompts: List[str], output_dir: str, chapter_hash: str) -> str:
    """
    将生图提示词保存为独立的文本文件
    
    Args:
        image_prompts: 生图提示词列表
        output_dir: 输出目录
        chapter_hash: 章节哈希值
    
    Returns:
        str: 保存的文件路径
    """
    prompts_file = os.path.join(output_dir, f"image_prompts_{chapter_hash}.txt")
    
    with open(prompts_file, 'w', encoding='utf-8') as f:
        f.write("# 图像生成提示词\n")
        f.write(f"# 生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
        f.write(f"# 章节哈希: {chapter_hash}\n")
        f.write(f"# 提示词总数: {len(image_prompts)}\n\n")
        
        for i, prompt in enumerate(image_prompts, 1):
            f.write(f"## 段落 {i} - 生图提示词\n")
            f.write(f"{prompt}\n\n")
            f.write("-" * 50 + "\n\n")
    
    return prompts_file


def create_file_index(output_dir: str, chapter_hash: str, final_report: Dict[str, Any]) -> str:
    """
    创建文件索引，方便用户查找生成的所有文件
    
    Args:
        output_dir: 输出目录
        chapter_hash: 章节哈希值
        final_report: 最终处理报告
    
    Returns:
        str: 索引文件路径
    """
    index_file = os.path.join(output_dir, f"file_index_{chapter_hash}.md")
    
    with open(index_file, 'w', encoding='utf-8') as f:
        f.write(f"# 文件索引 - 章节 {chapter_hash}\n\n")
        f.write(f"**生成时间**: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}  \n")
        f.write(f"**处理状态**: {'成功' if final_report.get('success') else '失败'}  \n")
        f.write(f"**段落总数**: {final_report.get('paragraphs_count', 0)}  \n")
        f.write(f"**成功段落**: {final_report.get('completed_segments', 0)}  \n")
        f.write(f"**失败段落**: {final_report.get('failed_segments', 0)}  \n\n")
        
        f.write("## 文件结构说明\n\n")
        f.write("```\n")
        f.write(f"video_{final_report.get('timestamp', 'YYYYMMDD_HHMMSS')}/\n")
        f.write(f"├── chapter_{chapter_hash}.json                    # 章节数据\n")
        f.write(f"├── paragraphs_{chapter_hash}.txt                 # 分段文字\n") 
        f.write(f"├── image_prompts_{chapter_hash}.txt              # 生图提示词\n")
        f.write(f"├── processing_report_{chapter_hash}.json         # 处理报告\n")
        f.write(f"├── file_index_{chapter_hash}.md                  # 本文件索引\n")
        f.write(f"├── chapter_{chapter_hash}_final.mp4             # 最终合并视频\n")
        f.write(f"├── chapter_{chapter_hash}_final.srt             # 最终字幕文件\n")
        segments_count = final_report.get('segments_count', 0)
        for i in range(min(segments_count, 3)):  # 只显示前3个作为示例
            f.write(f"├── segment_{i+1:02d}/                             # 段落{i+1}目录\n")
            f.write(f"│   ├── segment_{chapter_hash}_{i}.json           # 段落数据\n")
            f.write(f"│   ├── paragraph_{i+1:02d}.txt                   # 原始文字\n")
            f.write(f"│   ├── prompt_{i+1:02d}.txt                      # 生图提示词\n")
            f.write(f"│   ├── image_{i+1:02d}.jpg                       # 生成图片\n")
            f.write(f"│   ├── audio_{i+1:02d}.wav                       # 生成音频\n")
            f.write(f"│   └── video_{i+1:02d}.mp4                       # 段落视频\n")
        if segments_count > 3:
            f.write(f"└── ... (共{segments_count}个段落目录)\n")
        f.write("```\n\n")
        
        f.write("## 主要输出文件\n\n")
        
        # 最终视频
        if final_report.get('output_file'):
            f.write(f"- **最终合并视频**: `{os.path.basename(final_report['output_file'])}`\n")
        
        # 字幕文件
        srt_file = final_report.get('files_generated', {}).get('srt_subtitle')
        if srt_file:
            f.write(f"- **字幕文件**: `{os.path.basename(srt_file)}`\n")
        
        f.write("\n## 数据文件\n\n")
        
        # 章节数据
        chapter_data = final_report.get('files_generated', {}).get('chapter_data')
        if chapter_data:
            f.write(f"- **章节数据**: `{os.path.basename(chapter_data)}`\n")
        
        # 分段文字
        f.write(f"- **分段文字**: `paragraphs_{chapter_hash}.txt`\n")
        
        # 生图提示词
        f.write(f"- **生图提示词**: `image_prompts_{chapter_hash}.txt`\n")
        
        # 处理报告
        f.write(f"- **处理报告**: `processing_report_{chapter_hash}.json`\n")
        
        f.write("\n## 段落目录\n\n")
        f.write("每个段落都有独立的子目录，包含该段落的所有相关文件：\n\n")
        
        if segments_count > 0:
            for i in range(segments_count):
                f.write(f"### segment_{i+1:02d}/ (段落 {i+1})\n")
                f.write(f"- `segment_{chapter_hash}_{i}.json` - 完整的段落处理数据\n")
                f.write(f"- `paragraph_{i+1:02d}.txt` - 段落原始文字\n")
                f.write(f"- `prompt_{i+1:02d}.txt` - 图像生成提示词\n") 
                f.write(f"- `image_{i+1:02d}.jpg` - 生成的图片\n")
                f.write(f"- `audio_{i+1:02d}.wav` - 生成的音频\n")
                f.write(f"- `video_{i+1:02d}.mp4` - 段落视频片段\n\n")
        
        f.write("## 使用说明\n\n")
        f.write("- **段落目录**：每个段落的所有文件都组织在独立的子目录中，方便查看和管理\n")
        f.write("- **JSON文件**：包含详细的处理数据和元信息\n")
        f.write("- **TXT文件**：便于直接查看和编辑文本内容\n")
        f.write("- **图片文件**：可以单独使用或重新处理\n")
        f.write("- **音频文件**：支持标准播放器播放\n")
        f.write("- **视频文件**：段落视频可独立播放，最终视频为所有段落的合并\n")
        f.write("- **所有文件都被保留**：方便后续查看、修改或重新处理\n")
    
    return index_file